
BITS 16
;ORG 0x1200

; Habilitando A20 - 2

CALL deshabilitar_A20
CALL checkear_A20
CALL habilitar_A20
CALL checkear_A20

; Deshabilitamos las interrupciones - 3

CLI

; Cargamos GDTR - 4
; extern GDT_DESC en algun lado
LGDT[GDT_DESC]

; Seteamos bit PE en CR0 - 5

MOV EAX, CR0
OR EAX, 1
MOV CR0, EAX

; saltamos a modo protegido - 6

JMP 0x10:modoprotegido

; actualizamos registros DS, ES, GS, FS, SS. - 7
BITS 32
modoprotegido:
MOV AX, 0x18
MOV DS, AX
MOV ES, AX
MOV GS, AX
MOV FS, AX
MOV SS, AX

MOV AX, 0x20; seteamos el segmento de video (4to índice empezando por el 1)
MOV ES, AX
mov	ebp, 0x1C000
mov	esp, 0x1C000

;Limplio la pantalla
xor esi,esi
mov ecx,(80*25)
mov ax,0
cicloLimpio:
	mov [es:esi],ax
	add esi,2
loop cicloLimpio

;Escribo la primer linea en la 3er fila
mov esi,(80*2*2);La posicion en la matriz pantalla es en bytes
mov ecx,80;Como escribo de a 2 bytes necesito 80 iteraciones para completar la linea
mov ax,0x7000;RGB todos en 1 para el fondo
cicloFila1:
	mov [es:esi],ax
	add esi,2
loop cicloFila1

;Escribo la 2da linea en la 24ra fila
mov esi,(80*2*23);La posicion en la matriz pantalla es en bytes
mov ecx,80;Como escribo de a 2 bytes necesito 80 iteraciones para completar la linea
mov ax,0x7000;RGB todos en 1 para el fondo
cicloFila2:
	mov [es:esi],ax
	add esi,2
loop cicloFila2

; Cargamos IDT
LIDT[IDT_DESC]
;inicializamos interrrupcions
call inicializar_idt

;xchg bx,bx
;mov byte [es:0xfffff3], 0x42 ;General Protection Fault

;mov bx,0	;division por cero
;div bx

	
	
	;Crear directorio y tabla de páginas
	call inicializar_dir_kernel
	
		
	mov cr3,eax		;direccion del dir de pags.
	

	;Activamos paginacion
	mov eax,cr0
	or eax,0x80000000
	mov cr0,eax
	
	
	;Mostra mensaje
	MOV AX, 0x20
	MOV ES, AX
	MOV ECX, mensaje_len
	MOV ESI, mensaje
	;MOV EDI, 1940
	MOV EDI,20
	MOV AH, 0x8A
ciclo:
	LODSB
	STOSW
	LOOP ciclo	
	
	
	
	JMP $

%include "a20.asm"
extern GDT_DESC
extern IDT_DESC
extern inicializar_idt
extern inicializar_dir_kernel
mensaje: db "Sin television y sin cerveza, Homero pierde la cabeza."
mensaje_len equ $-mensaje
 
